# Python模块的学习

# 一、什么是模块
"""
模块就是一个Python文件。模块里面可以有函数、类、变量等，可以直接将这个模块拿过来用(类比C/C++库)
"""
# 一、模块的导入
"""
模块在使用之前需要先导入:
1. 导入: import 模块名1, 模块名2 ... # 导入模块中所有的功能。使用: 模块名.功能名 

2. 导入: from 模块名 import 功能名   # 导入模块中指定的功能。使用:功能名()

3. 导入: from 模块名 import *       # 导入模块中所有的功能。使用:功能名()

4. 导入:  import 模块名 as 别名          # 使用 别名.功能名 
         from 模块名 import 功能名 as 别名  # 使用 功能名就相当于别名->别名()
"""
# 1
# import time
# print("你好")
# time.sleep(5)
# print("我好")

# 2
# from time import sleep
# print("你好")
# sleep(5)
# print("我好")

# 二、自定义模块
"""
自定义模块就是用户自己编写的模块，

注意: 当导入多个模块的时候，且模块内有的同名功能，当调用同名功能时，调用到的是后面导入的模块的功能
"""

# 三、测试模块 --- __main__变量
"""
在实际开发中，当一个开发人员编写完一个模块后，为了让模块能够在项目中达到想要的效果，
开发人员通常会自行在py文件中添加一些测试信息，例如，在my_module1.py文件中添加测试代码test(1,1)

但有一个问题：无论是当前文件，还是其他已经导入了该模块的文件，在运行的时候都会自动执行`test'函数的调用
if __name__ == '__main__':
    测试代码

什么意思呢？
__name__ 是一个特殊的内置变量，表示当前模块的名称。
当一个 Python 文件被运行时，Python 会将__name__ 变量的值设置为 "__main__"。
而__main__ 是一个字符串，表示主程序。
"""

# 四、__all__
"""
__all__ = ['功能名', 'xxx']
如果一个模块文件中有__al1__变量，当使用`from xxx import *导入时，只能导入这个列表中的功能
"""


